var code = ""; // 在全局定义验证码

// 错误信息弹出框--显示在中间
function showErrorDialog(text) {
    if ($("#layer") != null) {
        $("#layer").remove();
    }

    var layer = document.createElement("div");
    layer.id = "layer";
    var style =
        {
            background: "rgba(200, 100, 100, 0.3)",
            position: "absolute",
            zIndex: 999,
            width: "280px",
            height: "50px",
            left: "590px",
            top: "410px"
        }
    for (var i in style) {
        layer.style[i] = style[i];
    }
    if (document.getElementById("layer") == null) {
        document.body.appendChild(layer);
        $("#layer").html(text);
        $("#layer").css({
            "font-size": "18px",
            "color": "red",
            "text-align": "center",
            "line-height": "50px",
            "border-radius": "5px"
        });
        $("#layer").fadeIn().delay(2000).fadeOut();
    }
}

// 错误信息弹出框--显示在右侧
function showErrorDialogRight(text) {
    if ($("#layer") != null) {
        $("#layer").remove();
    }

    var layer = document.createElement("div");
    layer.id = "layer";
    var style =
        {
            background: "rgba(200, 100, 100, 0.3)",
            position: "absolute",
            zIndex: 999,
            width: "280px",
            height: "50px",
            left: "985px",
            top: "425px",
        }
    for (var i in style) {
        layer.style[i] = style[i];
    }
    if (document.getElementById("layer") == null) {
        document.body.appendChild(layer);
        $("#layer").html(text);
        $("#layer").css({
            "font-size": "18px",
            "color": "red",
            "text-align": "center",
            "line-height": "50px",
            "border-radius": "5px",
            "z-index": "1000"
        });
        $("#layer").fadeIn().delay(2000).fadeOut();
    }
}

// 普通信息提示弹出框--显示在中间
function showDialog(text) {
    if ($("#layer") != null) {
        $("#layer").remove();
    }

    var layer = document.createElement("div");
    layer.id = "layer";
    var style =
        {
            background: "rgba(200, 200, 220, 0.3)",
            position: "absolute",
            zIndex: 999,
            width: "280px",
            height: "50px",
            left: "985px",
            top: "425px",
        }
    for (var i in style) {
        layer.style[i] = style[i];
    }
    if (document.getElementById("layer") == null) {
        document.body.appendChild(layer);
        $("#layer").html(text);
        $("#layer").css({
            "font-size": "18px",
            "color": "dodgerblue",
            "text-align": "center",
            "line-height": "50px",
            "border-radius": "5px",
            "z-index": "1000"
        });
        $("#layer").fadeIn().delay(2000).fadeOut();
    }
}

// 产生一个随机颜色
function randomColor() {
    return "rgb(" + Math.random() * 256 + "," + Math.random() * 256 + "," + Math.random() * 256 + ")";
}

var phoneVerifyCode = ""; // 手机验证码
var emailVerifyCode = ""; // 邮箱验证码

// 获取验证码button
var countdownByPhone = 60; // 发送验证码倒计时（时间到了后可再次发送验证码）
var countdownByEmail = 60;

// 获取验证码倒计时
function sendVerifyCountdown(obj, countdown) {
    if (countdown == 0) {
        obj.val("获取验证码");
        obj.attr('disabled', false);
        obj.css("cursor", "pointer");
        countdown = 60;
        obj.css("background", "orange");

        return;
    } else {
        obj.attr('disabled', true);
        obj.val("重新发送(" + (--countdown) + "s)");
        obj.attr("class", "");
        obj.css("font-size", "13px");
        obj.css("padding-left", "5px");
        obj.css("cursor", "not-allowed");
        obj.css("background", "gray");
    }

    setTimeout(function () {
        sendVerifyCountdown(obj, countdown);
    }, 1000);
}

// 给手机发送验证码
function sendVerifyToPhone(phone, btn) {
    var obj = $("#" + btn);

    if (checkPhone(phone)) {
        //obj.attr("class", "getVerify");
        // 获取验证码倒计时
        sendVerifyCountdown(obj, countdownByPhone);
        // 如果手机号合法，获得手机号
        var phoneVal = $("#" + phone).val();
        // 发送ajax请求，给手机发送验证码
        $.post("user/sendVerifyCodeToPhone", {phone: phoneVal}, function (data) {
            // 获得返回的随机验证码
            phoneVerifyCode = data;
        });
    }

}

// 给手机发送验证码
function sendVerifyToPhone2(phoneVal, btn) {
    var obj = $("#" + btn);

    // 获取验证码倒计时
    sendVerifyCountdown(obj, countdownByPhone);
    // 如果手机号合法，获得手机号
    // 发送ajax请求，给手机发送验证码
    $.post("user/sendVerifyCodeToPhone", {phone: phoneVal}, function (data) {
        // 获得返回的随机验证码
        phoneVerifyCode = data;
    });
}

// 给邮箱发送验证码
function sendVerifyToEmial(email, btn) {
    var obj = $("#" + btn);

    if (checkEmail(email)) {
        //obj.attr("class", "getVerify");
        // 获取验证码倒计时
        sendVerifyCountdown(obj, countdownByEmail);
        // 如果邮箱合法，获得邮箱
        var emailVal = $("#" + email).val();
        // 发送ajax请求，给邮箱发送验证码
        $.post("user/sendVerifyCodeToEmailUpdate", {email: emailVal}, function (data) {
            // 获得返回的随机验证码
            emailVerifyCode = data;
        });
    }
}

// 检查是否为合法的手机号
function isPhone(phone) {
    var phone = $("#" + phone);
    /* 获得手机号输入框的值*/
    var phoneVal = phone.val();

    var regexp = /^((13[0-9])|(14[5,7,9])|(15([0-3]|[5-9]))|(166)|(17[0,1,3,5,6,7,8])|(18[0-9])|(19[8|9]))\d{8}$/;

    /* 手机号非空检查*/
    if (phoneVal == "") {
        showErrorDialog("手机号不能为空！");

        return false;
    } else if (!regexp.test(phoneVal)) { // 手机号合法性检查
        showErrorDialog("请输入正确的手机号！");

        return false;
    }

    return true;
}

// 检查是否为合法的邮箱
function isEmail(email) {
    var regexp = /^([a-zA-Z0-9_-]{1,16})@([a-zA-Z0-9]{1,9})(\.[a-zA-Z0-9]{1,9}){0,3}(\.(?:com|net|org|edu|gov|mil|cn|us)){1,4}$/; // 邮箱校验正则表达式

    var email = $("#" + email);
    var emailVal = email.val();

    // 邮箱非空判断
    if (emailVal == "") {
        showErrorDialog("邮箱不能为空！")
        return false;
    } else if (!regexp.test(emailVal)) {
        showErrorDialog("请输入正确的邮箱！")

        return false;
    }

    return true;

}

// 校验手机号(验手机号是否已被注册)
function checkPhone(phone) {

    if (isPhone(phone)) {
        // 校验通过,发送ajax请求，校验手机号是否已被注册
        $.post("user/isPhoneAlreadyRegister", {phone: phoneVal}, function (data) {
            //处理服务器响应的数据
            if (data.flag) {
                showErrorDialog(data.errorMsg);

                return false;
            }
        });
    }

    return true;
}

// 邮箱校验(校验邮箱是否已被注册)
function checkEmail(email) {

    if (isEmail(email)) {
        // 校验通过,发送ajax请求，校验邮箱是否已被注册
        $.post("user/isEmailAlreadyRegister", {email: emailVal}, function (data) {
            //处理服务器响应的数据
            if (data.flag) {
                showErrorDialog("该邮箱已被注册！");

                return false;
            }
        });
    }


    return true;
}

// 给手机发送验证码（无需校验手机号的合法性）
function sendPhoneIgnoreValidate(phone, btn) {
    var obj = $("#" + btn);
    // 获取验证码倒计时
    sendVerifyCountdown(obj, countdownByEmail);

    // 获得手机号
    var phoneVal = $("#" + phone).val();
    // 发送ajax请求，给邮箱发送验证码
    $.post("user/sendVerifyCodeToPhone", {phone: phoneVal}, function (data) {
        // 获得返回的随机验证码
        phoneVerifyCode = data;
    });
}

// 给邮箱发送验证码（无需校验邮箱的合法性）
function sendEmailIgnoreValidate(email, btn) {
    var obj = $("#" + btn);
    // 获取验证码倒计时
    sendVerifyCountdown(obj, countdownByEmail);

    // 获得邮箱号
    var emailVal = $("#" + email).val();
    // 发送ajax请求，给邮箱发送验证码
    $.post("user/sendVerifyCodeToEmailUpdate", {email: emailVal}, function (data) {
        // 获得返回的随机验证码
        emailVerifyCode = data;
    });
}

// 找回密码第一步（通过手机）
function retrievePwdByPhoneStep1(phoneId, code) {

    if (isPhone(phoneId) && checkRandomCode(code)) {
        // 在第二步中显示刚刚输入的手机号
        $("#email_span").html($("#" + phoneId).val());

        $("#step2_span").attr("class", "am-badge  am-round am-badge-warning-active");
        $("#step2_li").attr("class", "am-active");
        $("#step1_div").attr("class", "am-tab-panel");
        $("#step2_div").prop("class", "am-tab-panel am-active");

        return true;
    }

    return false;
}

// 找回密码第一步（通过邮箱）
function retrievePwdByEmailStep1(emailId, code) {

    if (isEmail(emailId) && checkRandomCode(code)) {
        // 在第二步中显示刚刚输入的邮箱
        $("#email_span").html($("#" + emailId).val());

        $("#step2_span").attr("class", "am-badge  am-round am-badge-warning-active");
        $("#step2_li").attr("class", "am-active");
        $("#step1_div").attr("class", "am-tab-panel");
        $("#step2_div").prop("class", "am-tab-panel am-active");

        return true;
    }

    return false;
}


// 找回密码第二步（通过手机）
function retrievePwdByPhoneStep2(code) {

    if (checkPhoneVerifyCode(code)) {
        $("#step3_span").attr("class", "am-badge  am-round am-badge-warning-active");
        $("#step3_li").attr("class", "am-active");
        $("#step2_div").attr("class", "am-tab-panel");
        $("#step3_div").prop("class", "am-tab-panel am-active");
    }

    return true;
}

// 找回密码第二步（通过邮箱）
function retrievePwdByEmailStep2(code) {

    if (checkEmailVerifyCode(code)) {
        $("#step3_span").attr("class", "am-badge  am-round am-badge-warning-active");
        $("#step3_li").attr("class", "am-active");
        $("#step2_div").attr("class", "am-tab-panel");
        $("#step3_div").prop("class", "am-tab-panel am-active");

        return true;
    }

    return false;
}

// 找回密码第三步
function retrievePwdStep3(phone_or_email, pwd, re_pwd) {
    // 获得新密码
    var new_pwd_val = $("#" + pwd).val();
    // 获得账号
    var phone_or_email_val = $("#" + phone_or_email).val();

    if (checkPassword(pwd) && checkRepassword(pwd, re_pwd)) {
        // 发送ajax请求，给邮箱发送验证码
        $.post("user/retrievePwd", {phone_or_email: phone_or_email_val, new_pwd: new_pwd_val}, function (data) {
            // 判断是否找回成功
            if (data.flag) {
                $("#step4_span").attr("class", "am-badge  am-round am-badge-warning-active");
                $("#step4_li").attr("class", "am-active");
                $("#step3_div").attr("class", "am-tab-panel");
                $("#step4_div").prop("class", "am-tab-panel am-active");
            } else {
                showErrorDialog(data.errorMsg);
            }
        });
    }
}

// 验证验证码(手机号)
function checkPhoneVerifyCode(verify) {
    var verify = $("#" + verify);
    var verifyCode = verify.val();

    if (phoneVerifyCode == "") {
        showErrorDialog("请获取验证码！");

        return false;
    }

    // 验证码非空判断
    if (verifyCode == "") {
        showErrorDialog("请填写验证码！");
        verify.css("border", "1px solid red");

        return false;
    }

    // 判断验证码是否正确
    if (verifyCode != phoneVerifyCode) {
        showErrorDialog("验证码错误！");
        verify.css("border", "1px solid red");

        return false;
    }

    verify.css("border", "");

    return true;
}

// nextBtn:下一步按钮元素id
function checkVerify(verify, nextBtn) {
    var verify = $("#" + verify);
    var verifyCode = verify.val();
    var nextBtn = $("#" + nextBtn);

    // 判断验证码是否正确
    if (verifyCode != "") {
        nextBtn.removeAttr("disabled");
    } else {
        nextBtn.prop("disabled", "disabled");
    }

    return true;
}

// 验证验证码(邮箱)--email:需要修改的邮箱号
// verify:验证码元素id
function checkEmailVerifyCode(verify, url, email) {
    var verify = $("#" + verify);
    var verifyCode = verify.val();

    if (emailVerifyCode == "") {
        showErrorDialog("请获取验证码！");

        return false;
    }

    // 验证码非空判断
    if (verifyCode == "") {
        showErrorDialog("请填写验证码！");
        verify.css("border", "1px solid red");

        return false;
    }

    // 判断验证码是否正确
    if (verifyCode != emailVerifyCode) {
        showErrorDialog("验证码错误！");
        verify.css("border", "1px solid red");

        return false;
    }

    // 判断是否传入邮箱元素
    if (typeof (email) != "undefined") { // 第二步
        if (checkEmailisEnable(email)) {
            // 校验通过,发送ajax请求，修改邮箱
            $.post("user/updateEmail", {email: emailVal}, function (data) {
                //处理服务器响应的数据
                if (data.flag) {
                    verify.css("border", "");
                    // 跳转页面
                    location.href = getRootPath() + "/" + url;
                }

                return false;
            });
        }
    } else if (typeof (url) != "undefined") { // 第一步
        location.href = getRootPath() + "/" + url;
    }

    verify.css("border", "");

    return true;
}


// 检查新邮箱是否可用
function checkEmailisEnable(email) {
    var emailVal = $("#" + email).val();
    // 校验通过,发送ajax请求，校验邮箱是否已被注册
    $.post("user/isEmailAlreadyRegister", {email: emailVal}, function (data) {
        //处理服务器响应的数据
        if (data.flag) {
            showErrorDialog("该邮箱已被注册！");

            return false;
        }
    });

    return true;
}

//js获取项目根路径，如： http://localhost:8083/uimcardprj
function getRootPath() {
    //获取当前网址，如： http://localhost:8083/uimcardprj/share/meun.jsp
    var curWwwPath = window.document.location.href;
    //获取主机地址之后的目录，如： /uimcardprj/share/meun.jsp
    var pathName = window.document.location.pathname;
    var pos = curWwwPath.indexOf(pathName);
    //获取主机地址，如： http://localhost:8083
    var localhostPath = curWwwPath.substring(0, pos);
    //获取带"/"的项目名，如：/uimcardprj
    var projectName = pathName.substring(0, pathName.substr(1).indexOf('/') + 1);
    return (localhostPath + projectName);
}

$(function () {
    createCode();
});

function createCode() {
    code = "";
    var codeLength = 4; // 验证码的长度
    var verifyCode = $("#code");
    var random = new Array(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R',
        'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'm', 'n', 'o', 'p', 'q', 'r',
        's', 't', 'u', 'v', 'w', 'x', 'y', 'z'); // 随机数

    for (var i = 0; i < codeLength; i++) { // 循环操作
        var index = parseInt(Math.random() * 62); // 取得随机数的索引（0~61）

        code += random[index]; // 根据索引取得随机数加到code上
    }

    verifyCode.css("background", randomColor);
    verifyCode.css("color", randomColor);
    verifyCode.css("letter-spacing", "4px");
    verifyCode.html(code); // 把code值赋给验证码

}

// 判断验证码是否正确（点击按钮随机产生的验证码）
function checkRandomCode(verify) {
    var verify = $("#" + verify);
    var verifyCode = verify.val();

    // 判断验证码是否正确
    if (verifyCode.toUpperCase() != code.toUpperCase()) {
        showErrorDialog("验证码输入错误！");

        return false;
    }

    return true;
}